#include "StudentManager.h"
#include <fstream>
#include <iostream>
#include <algorithm>
#include "FileHandler.h"

// 构造函数
StudentManager::StudentManager(const std::string &role) : currentUserRole(role) {}

// 设置当前用户角色
void StudentManager::setCurrentUserRole(const std::string &role)
{
    currentUserRole = role;
}

// 检查是否具有管理员权限
bool StudentManager::isAdmin() const
{
    return currentUserRole == "admin";
}

// 添加学生 (仅管理员权限)
bool StudentManager::addStudent(const Student &student)
{
    if (!isAdmin())
    {
        return false;
    }
    students.push_back(student);
    return true;
}

// 删除学生 (仅管理员权限)
bool StudentManager::deleteStudent(int id)
{
    if (!isAdmin())
    {
        return false;
    }
    auto it = std::find_if(students.begin(), students.end(), [id](const Student &s)
                           { return s.getId() == id; });
    if (it != students.end())
    {
        students.erase(it);
        return true;
    }
    return false;
}

// 更新学生信息 (仅管理员权限)
bool StudentManager::updateStudent(int id, const std::string &newName, float newScore)
{
    if (!isAdmin())
    {
        return false;
    }
    auto it = std::find_if(students.begin(), students.end(), [id](const Student &s)
                           { return s.getId() == id; });
    if (it != students.end())
    {
        it->setName(newName);
        it->setScore(newScore);
        return true;
    }
    return false;
}

// 查询学生信息 (所有用户都可以执行)
bool StudentManager::queryStudent(int id, Student &student) const
{
    auto it = std::find_if(students.begin(), students.end(), [id](const Student &s)
                           { return s.getId() == id; });
    if (it != students.end())
    {
        student = *it;
        return true;
    }
    return false;
}

// 显示所有学生信息 (所有用户都可以执行)
void StudentManager::displayAllStudents() const
{
    if (students.empty())
    {
        std::cout << "当前没有学生信息" << std::endl;
        return;
    }

    std::cout << "所有的学生信息如下：学号\t姓名\t分数" << std::endl;
    for (const auto &student : students)
    {
        std::cout << student << std::endl;
    }
}

// 保存学生信息到文件（仅管理员可执行）
bool StudentManager::saveToFile(const std::string &filename) const
{
    if (!isAdmin())
    {
        return false;
    }

    FileHandler fileHandler;
    return fileHandler.saveStudentsToFile(students, filename);
}

// 从文件加载学生信息（仅管理员可执行）
bool StudentManager::loadFromFile(const std::string &filename)
{
    if (!isAdmin())
    {
        return false;
    }
    FileHandler fileHandler;
    return fileHandler.loadStudentsFromFile(students, filename);
}
// 记录操作日志（可选）
void StudentManager::logOperation(const std::string &operation) const
{
}
